不管什麼格式,資料的安全性都是很重要的議題,此篇將介紹XML格式常搭配使用的安全機制以及其與別種格式不同特有要注意的事項。
資訊安全是另一個大議題,這裡僅針對其中的一部份,就是「使用網際網路傳送XML」須要考量的部份進行說明。
資訊安全大概有下面幾個考量,說明如下:
-資料完整性(Integrity)
避免資料在傳輸過程中被修改或破壞
-身份認證(Authentication)
避免冒名進行資料傳送
-不可否認(Non-Repudiation)
避免發送方否認傳送資料的事實
-隱密性(Confidentiality)
避免在傳輸過程中被竊取觀看資料
前面三項,一般是以憑證對發送的訊息進行數位簽章來達到要求,而隱密性有兩種做法,一是將原始XML資料的重要部份(eg.金額、帳號)或全部進行編碼並於接收方進行對應的解碼;另一種做法則是將隱密性的功能,交由SSL來達成。比較常見的是第二種的做法,即採用SSL傳送不加密的XML格式資料。
所謂的數位簽章,白話點講就是拿一張自己的憑證和XML資料做一番高深的數學運算然後得到另外的一小坨資料,就是數位簽章了。接著接收方收到XML資料和數位簽章之後,就拿發送方的公開憑證和XML訊息再做一番高深的數學運算,如果算出來的結果可以和數位簽章相符,那就沒問題了。
對XML進行的數位簽章,就簽章對象而言,可以再細分成兩幾種做法:
-前一段提到的是針對全文簽章
-有時侯為了加快系統執行,會只針對部份資料內容(eg.帳號、金額)進行簽章
就簽章模式而言,有以下幾種做法:
-單簽
最單純的簽章,一份文件一個簽章
-多簽
應用在較重要文件,須要一個以上的角色簽章才生效,例如金額較大的付款訊息
-重疊簽
若透過第三方傳送訊息,第三方可以加上封裝之後,再加簽以證實傳送行為
技術上數位簽章實體的存在,有以下兩種做法:
-合在一起
將數位簽章加入在XML訊息本身
-分開
將數位簽章與XML訊息分開存放,例如放在SOAP的Body處或是RosettaNet的另一個MIME part
有一個與其他格式的資料不同的地方,就是XML格式的資料要進行簽章之前,要先進行所謂Canonicalization的動作,簡單講就是把已經規定很嚴謹的XML再做一番整理,舉例說明如下:
<Comment ></Comment>和<Comment/>兩種寫法都合法,但是Canonicalization會統一將後者的表示方式改為前者